package com.gtw.pattern.abstrac;

/**
 * 产品A,产品B称为产品族
 * 有多少个产品族,抽象工厂类中就必须有多少个创建方法
 * 产品的1,2称为产品等级
 * 有多少个产品等级就必须有多少个实现工厂类
 */

/**
 * 优点:
 *      1.封装性强,只要知道工厂类是谁就能创建出想要的对象,如:要1类产品,只需要Creator1就行
 *      2.产品族内的约束为非公开状态,如:产品A与产品B的生成比例
 *      3.产品等级扩展容易,增加3类产品,只需要增加Creator3与对应产品等级
 * 缺点:
 *      1.产品族的扩展困难,要增加产品C,抽象工厂需要改,具体工厂实现全部要修改
 * 使用场景:
 *      一个对象族都有相同约束(即产品等级相同)
 * 最佳实践:
 *      软件开发涉及不同操作系统(不同操作系统可以看做产品等级),通过抽象工厂屏蔽掉操作系统对应用的影响,
 *      由不同产品类去处理与操作系统的交互信息
 */
public abstract class AbstractCreator {

    public abstract ProductA createProductA();

    public abstract ProductB createProductB();
}
